package com.lxj.xpopup.impl;

import android.content.Context;
import android.view.Gravity;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.lxj.easyadapter.EasyAdapter;
import com.lxj.easyadapter.MultiItemTypeAdapter;
import com.lxj.easyadapter.ViewHolder;
import com.lxj.xpopup.R;
import com.lxj.xpopup.core.AttachPopupView;
import com.lxj.xpopup.interfaces.OnSelectListener;
import com.lxj.xpopup.util.XPopupUtils;
import com.lxj.xpopup.widget.VerticalRecyclerView;
import java.util.Arrays;

public class AttachListPopupView extends AttachPopupView {
  RecyclerView recyclerView;
  protected int bindLayoutId;
  protected int bindItemLayoutId;
  protected int contentGravity = Gravity.CENTER;

  /**
   * @param bindLayoutId layoutId 要求layoutId中必须有一个id为recyclerView的RecyclerView
   * @param bindItemLayoutId itemLayoutId
   *     条目的布局id，要求布局中有id为iv_image的ImageView（非必须），和id为tv_text的TextView
   */
  public AttachListPopupView(@NonNull Context context, int bindLayoutId, int bindItemLayoutId) {
    super(context);
    this.bindLayoutId = bindLayoutId;
    this.bindItemLayoutId = bindItemLayoutId;
    addInnerContent();
  }

  @Override
  protected int getImplLayoutId() {
    return bindLayoutId == 0 ? R.layout._xpopup_attach_impl_list : bindLayoutId;
  }

  @Override
  protected void onCreate() {
    super.onCreate();
    recyclerView = findViewById(R.id.recyclerView);
    if (bindLayoutId != 0) {
      recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
    }
    final EasyAdapter<String> adapter =
        new EasyAdapter<String>(
            Arrays.asList(data),
            bindItemLayoutId == 0 ? R.layout._xpopup_adapter_text : bindItemLayoutId) {
          @Override
          protected void bind(@NonNull ViewHolder holder, @NonNull String s, int position) {
            holder.setText(R.id.tv_text, s);
            ImageView imageView = holder.getViewOrNull(R.id.iv_image);
            if (iconIds != null && iconIds.length > position) {
              if (imageView != null) {
                XPopupUtils.setVisible(imageView, true);
                imageView.setBackgroundResource(iconIds[position]);
              }
            } else {
              XPopupUtils.setVisible(imageView, false);
            }

            if (bindItemLayoutId == 0) {
              if (popupInfo.isDarkTheme) {
                holder
                    .<TextView>getView(R.id.tv_text)
                    .setTextColor(getResources().getColor(R.color._xpopup_white_color));
              } else {
                holder
                    .<TextView>getView(R.id.tv_text)
                    .setTextColor(getResources().getColor(R.color._xpopup_dark_color));
              }
              LinearLayout linearLayout = holder.getView(R.id._ll_temp);
              linearLayout.setGravity(contentGravity);
            }
          }
        };
    adapter.setOnItemClickListener(
        new MultiItemTypeAdapter.SimpleOnItemClickListener() {
          @Override
          public void onItemClick(View view, RecyclerView.ViewHolder holder, int position) {
            if (selectListener != null) {
              selectListener.onSelect(position, adapter.getData().get(position));
            }
            if (popupInfo.autoDismiss) dismiss();
          }
        });
    recyclerView.setAdapter(adapter);
    applyTheme();
  }

  protected void applyTheme() {
    if (bindLayoutId == 0) {
      if (popupInfo.isDarkTheme) {
        applyDarkTheme();
      } else {
        applyLightTheme();
      }
      attachPopupContainer.setBackground(
          XPopupUtils.createDrawable(
              getResources()
                  .getColor(
                      popupInfo.isDarkTheme
                          ? R.color._xpopup_dark_color
                          : R.color._xpopup_light_color),
              popupInfo.borderRadius));
    }
  }

  @Override
  protected void applyDarkTheme() {
    super.applyDarkTheme();
    ((VerticalRecyclerView) recyclerView).setupDivider(true);
  }

  @Override
  protected void applyLightTheme() {
    super.applyLightTheme();
    ((VerticalRecyclerView) recyclerView).setupDivider(false);
  }

  String[] data;
  int[] iconIds;

  public AttachListPopupView setStringData(String[] data, int[] iconIds) {
    this.data = data;
    this.iconIds = iconIds;
    return this;
  }

  public AttachListPopupView setContentGravity(int gravity) {
    this.contentGravity = gravity;
    return this;
  }

  private OnSelectListener selectListener;

  public AttachListPopupView setOnSelectListener(OnSelectListener selectListener) {
    this.selectListener = selectListener;
    return this;
  }
}
